package com.esteel.settlement.service;

import java.util.Map;

import org.springframework.data.domain.Page;
import org.springframework.data.domain.Pageable;

import com.esteel.settlement.entity.TbSettPay;
import com.esteel.settlement.pa.packet.Answer;
import com.esteel.settlement.vo.PayQueryVo;
import com.esteel.settlement.vo.SettPayVo;
import com.esteel.settlement.vo.TbSettPayVo;

public interface SettPayService {

	public TbSettPay save(TbSettPay tbSettPay);

	/**
	 * 交易付款处理逻辑
	 * @param settPay
	 * @return
	 */
	public Map<String,String> pay(SettPayVo settPay);
	
	/**
	 * 删除尚未发送成功的支付订单
	 * @param payId
	 */
	public void delete(long payId);
	
	public TbSettPay findByPaySerialNo(String paySerialNo);

	/**
	 * 平台操作的强制支付操作
	 * @param payId
	 * @param funcFlag 1代理复核 2 强制支付
	 * @return
	 */
	public Answer payForce(long payId,int funcFlag);
	
	/**
	 * 付货款的处理
	 * @param orderNo
	 * @param quantity 放货数量
	 */
	public int payment(String orderNo, Integer quantity);
	
	/**
	 * 尾款的处理
	 * @param orderNo
	 * @return
	 */
	public int payFinal(String orderNo);

	/**
	 * 查询付款信息
	 * @param page
	 * @return
	 */
	public Page<TbSettPay> findAll(Pageable page);

	public TbSettPay findOne(long payId);

	/**
	 * 解冻交易成功后的金额
	 * @param payId
	 * @return
	 */
	public Answer unFreezeSettPay(long payId);

	/**
	 * 撤销支付
	 * @param payId
	 * @return
	 */
	public Answer payCancel(long payId);

	/**
	 * 撤销支付
	 * @param paySerialNo 支付订单号
	 * @return
	 */
	public  Map<String,String> payCancel(String paySerialNo);

	/**
	 * 根据查询条件获得记录
	 * @param payQueryVo
	 * @return
	 */
	public Page<TbSettPayVo> payQuery(PayQueryVo payQueryVo);

	/**
	 * 支付订单的订金的处理
	 * @param orderNo
	 */
	public int payDeposit(String orderNo);

	
}
